package com.tanhua.server.exception;

import com.tanhua.model.vo.ErrorResult;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 统一异常处理。
 *   到controller出现异常时，SpringMvc会交由此类的指定方法处理
 * 1、声明异常处理器
 *    @ControllerAdvice      ：返回JSON + 跳转错误页面
 *    @RestControllerAdvice  : 继承了@ControllerAdvice  （只能返回JSON）
 * 2、定义异常处理的方法
 */
@RestControllerAdvice
public class ExceptionAdvice {

    /**
     * 异常处理方法：
     *    1、返回值和Controller返回值一致
     *    2、可以指定此方法处理的异常形式
     */
    @ExceptionHandler(Exception.class)
    public ResponseEntity handlerException(Exception e) {
        e.printStackTrace();
        ErrorResult vo = ErrorResult.error();
        return ResponseEntity.status(500).body(vo); //指定相应数据
    }

    /**
     * 方法的参数：抛出的异常对象
     */
    @ExceptionHandler(BusinessException.class)
    public ResponseEntity handlerBusinessException(BusinessException e) {
        e.printStackTrace();
        ErrorResult vo = e.getVo();
        return ResponseEntity.status(500).body(vo); //指定相应数据
    }
}
